home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-13 / mg2a_src.zip / DIRED.C < prev    next >
C/C++ Source or Header  |  1988-08-23  |  4KB  |  196 lines

  1. /* dired module for mg 2a    */
  2. /* by Robert A. Larson        */
  3.  
  4. #include "def.h"
  5.  
  6. #ifndef NO_DIRED
  7.  
  8. BUFFER *dired_();
  9.  
  10. /*ARGSUSED*/
  11. dired(f, n)
  12. int f, n;
  13. {
  14.     char dirname[NFILEN];
  15.     BUFFER *bp;
  16.  
  17.     dirname[0] = '\0';
  18.     if(eread("Dired: ", dirname, NFILEN, EFNEW | EFCR) == ABORT)
  19.     return ABORT;
  20.     if((bp = dired_(dirname)) == NULL) return FALSE;
  21.     curbp = bp;
  22.     return showbuffer(bp, curwp, WFHARD | WFMODE);
  23. }
  24.  
  25. /*ARGSUSED*/
  26. d_otherwindow(f, n)
  27. int f, n;
  28. {
  29.     char dirname[NFILEN];
  30.     BUFFER *bp;
  31.     WINDOW *wp;
  32.  
  33.     dirname[0] = '\0';
  34.     if(eread("Dired other window: ", dirname, NFILEN, EFNEW | EFCR) == ABORT)
  35.     return ABORT;
  36.     if((bp = dired_(dirname)) == NULL) return FALSE;
  37.     if((wp = popbuf(bp)) == NULL) return FALSE;
  38.     curbp = bp;
  39.     curwp = wp;
  40.     return TRUE;
  41. }
  42.  
  43. /*ARGSUSED*/
  44. d_del(f, n)
  45. int f, n;
  46. {
  47.     if(n < 0) return FALSE;
  48.     while(n--) {
  49.     if(llength(curwp->w_dotp) > 0)
  50.         lputc(curwp->w_dotp, 0, 'D');
  51.     if(lforw(curwp->w_dotp) != curbp->b_linep)
  52.         curwp->w_dotp = lforw(curwp->w_dotp);
  53.     }
  54.     curwp->w_flag |= WFEDIT | WFMOVE;
  55.     curwp->w_doto = 0;
  56.     return TRUE;
  57. }
  58.  
  59. /*ARGSUSED*/
  60. d_undel(f, n)
  61. int f, n;
  62. {
  63.     if(n < 0) return d_undelbak(f, -n);
  64.     while(n--) {
  65.     if(llength(curwp->w_dotp) > 0)
  66.         lputc(curwp->w_dotp, 0, ' ');
  67.     if(lforw(curwp->w_dotp) != curbp->b_linep)
  68.         curwp->w_dotp = lforw(curwp->w_dotp);
  69.     }
  70.     curwp->w_flag |= WFEDIT | WFMOVE;
  71.     curwp->w_doto = 0;
  72.     return TRUE;
  73. }
  74.  
  75. /*ARGSUSED*/
  76. d_undelbak(f, n)
  77. int f, n;
  78. {
  79.     if(n < 0) return d_undel(f, -n);
  80.     while(n--) {
  81.     if(llength(curwp->w_dotp) > 0)
  82.         lputc(curwp->w_dotp, 0, ' ');
  83.     if(lback(curwp->w_dotp) != curbp->b_linep)
  84.         curwp->w_dotp = lback(curwp->w_dotp);
  85.     }
  86.     curwp->w_doto = 0;
  87.     curwp->w_flag |= WFEDIT | WFMOVE;
  88.     return TRUE;
  89. }
  90.  
  91. /*ARGSUSED*/
  92. d_findfile(f, n)
  93. int f, n;
  94. {
  95.     char fname[NFILEN];
  96.     register BUFFER *bp;
  97.     register int s;
  98.     BUFFER *findbuffer();
  99.  
  100.     if((s = d_makename(curwp->w_dotp, fname)) == ABORT) return FALSE;
  101.     if ((bp = (s ? dired_(fname) : findbuffer(fname))) == NULL) return FALSE;
  102.     curbp = bp;
  103.     if (showbuffer(bp, curwp, WFHARD) != TRUE) return FALSE;
  104.     if (bp->b_fname[0] != 0) return TRUE;
  105.     return readin(fname);
  106. }
  107.  
  108. /*ARGSUSED*/
  109. d_ffotherwindow(f, n)
  110. int f, n;
  111. {
  112.     char fname[NFILEN];
  113.     register BUFFER *bp;
  114.     register int s;
  115.     register WINDOW *wp;
  116.     BUFFER *findbuffer();
  117.  
  118.     if((s = d_makename(curwp->w_dotp, fname)) == ABORT) return FALSE;
  119.     if ((bp = (s ? dired_(fname) : findbuffer(fname))) == NULL) return FALSE;
  120.     if ((wp = popbuf(bp)) == NULL) return FALSE;
  121.     curbp = bp;
  122.     curwp = wp;
  123.     if (bp->b_fname[0] != 0) return TRUE;  /* never true for dired buffers */
  124.     return readin(fname);
  125. }
  126.  
  127. /*ARGSUSED*/
  128. d_expunge(f, n)
  129. int f, n;
  130. {
  131.     register LINE *lp, *nlp;
  132.     char fname[NFILEN];
  133.     VOID lfree();
  134.  
  135.     for(lp = lforw(curbp->b_linep); lp != curbp->b_linep; lp = nlp) {
  136.     nlp = lforw(lp);
  137.     if(llength(lp) && lgetc(lp, 0) == 'D') {
  138.         switch(d_makename(lp, fname)) {
  139.         case ABORT:
  140.             ewprintf("Bad line in dired buffer");
  141.             return FALSE;
  142.         case FALSE:
  143.             if(unlink(fname) < 0) {
  144.             ewprintf("Could not delete '%s'", fname);
  145.             return FALSE;
  146.             }
  147.             break;
  148.         case TRUE:
  149.             if(unlinkdir(fname) < 0) {
  150.             ewprintf("Could not delete directory '%s'", fname);
  151.             return FALSE;
  152.             }
  153.             break;
  154.         }
  155.         lfree(lp);
  156.         curwp->w_flag |= WFHARD;
  157.     }
  158.     }
  159.     return TRUE;
  160. }
  161.  
  162. /*ARGSUSED*/
  163. d_copy(f, n)
  164. int f, n;
  165. {
  166.     char frname[NFILEN], toname[NFILEN];
  167.     int stat;
  168.  
  169.     if(d_makename(curwp->w_dotp, frname) != FALSE) {
  170.     ewprintf("Not a file");
  171.     return FALSE;
  172.     }
  173.     if((stat = eread("Copy %s to: ", toname, NFILEN, EFNEW | EFCR, frname))
  174.     != TRUE) return stat;
  175.     return copy(frname, toname) >= 0;
  176. }
  177.  
  178. /*ARGSUSED*/
  179. d_rename(f, n)
  180. int f, n;
  181. {
  182.     char frname[NFILEN], toname[NFILEN];
  183.     int stat;
  184.  
  185.     if(d_makename(curwp->w_dotp, frname) != FALSE) {
  186.     ewprintf("Not a file");
  187.     return FALSE;
  188.     }
  189.     if((stat = eread("Rename %s to: ", toname, NFILEN, EFNEW | EFCR, frname))
  190.     != TRUE) return stat;
  191.     return rename(frname, toname) >= 0;
  192. }
  193. #endif
  194.  
  195.  
  196.